#include <stdio.h>

#define MaxLen 500

//树状数组，但一定要从1下标开始，而不是0
//普通树状数组可以实现：单点变化，范围查询
//而如果树状数组维护的是一个「差分数组」的话，就可以实现：范围变化，单点查询
int treeArr[MaxLen];

int arrLen;

//获取二进制最右位置的1
int GetLowBit(int n)
{
    // n & (~n + 1)
    return n & -n;
}

//i位置的元素 + v
void Add(int i, int v)
{
    while (i <= arrLen)
    {
        treeArr[i] += v;
        i += GetLowBit(i);
    }
}

//获取1~i范围的累加和
//要想获取指定起点、终点的累加和，只需sum(end) - sum(start - 1)
void GetRangeSum(int i)
{
    int ans = 0;
    while (i > 0)
    {
        ans += treeArr[i];
        i -= GetLowBit(i);
    }
    return ans;
}